// Copyright 2022 a.o.smith ALL Rights Reserved
package com.liuxinlong.modules.system.service;

import com.liuxinlong.modules.entity.FileManage;
import org.springframework.web.multipart.MultipartRequest;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 文件管理服务层接口
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2022年2月9日
 */
public interface FileManageService {
    /**
     * 查询文件管理记录列表
     *
     * @param queryParam 查询参数
     * @return 文件管理记录列表
     */
    List<Map<String, Object>> queryFileList(Map<String, Object> queryParam);

    /**
     * 查询文件管理记录数量
     *
     * @param queryParam 查询参数
     * @return 文件管理记录数
     */
    int getFileCount(Map<String, Object> queryParam);

    /**
     * 新增文件管理记录
     *
     * @param fileManage 文件管理记录信息
     */
    void addFileManage(FileManage fileManage);

    /**
     * 修改文件管理记录
     *
     * @param fileManage 文件管理记录信息
     */
    void updateFileManage(FileManage fileManage);

    /**
     * 删除文件管理记录
     *
     * @param id 文件管理记录信息id
     */
    void deleteFileManage(String id);

    /**
     * 查询业务相关文件信息
     *
     * @param businessId 业务id
     * @return 业务相关文件信息
     */
    Map<String, Object> queryFileManageInfos(String businessId);

    /**
     * 查询文件信息
     *
     * @param id 文件id
     * @return 文件信息
     */
    Map<String, Object> getOneFileManageInfo(String id);

    /**
     * 文件下载
     *
     * @param fileId   文件id
     * @param response 返回体
     */
    void downloadFile(String fileId, HttpServletResponse response);

    /**
     * 文件下载
     *
     * @param batchId   文件id
     * @param response 返回体
     */
    void batchDownloadFile(String batchId, HttpServletResponse response);

    /**
     * 文件预览
     *
     * @param fileId   文件id
     * @param response 返回体
     */
    void previewFile(String fileId, HttpServletResponse response);

    /**
     * spo文件预览
     *
     * @param docId    文件id
     * @param response 返回体
     */
    void previewFileSpo(String docId, HttpServletResponse response);

    /**
     * 批量修改文件关联业务id
     *
     * @param attachIds  文件id
     * @param businessId 业务id
     */
    void updateBusinessFile(String attachIds, String businessId);

    /**
     * 获取文件map
     *
     * @param businessType 业务类型
     * @return 文件map
     */
    Map<String, Map<String, String>> getFileMap(int businessType);

    /**
     * 上传文件到spo
     *
     * @param multipartRequest 请求信息
     * @return 文件信息
     */
    Map<String, Object> uploadFileSpo(MultipartRequest multipartRequest);

    /**
     * 上传文件到中转站
     *
     * @param multipartRequest 请求信息
     * @return 文件信息
     */
    Map<String, Object> uploadFileTransfer(MultipartRequest multipartRequest, int businessType);

    /**
     * 上传文件
     *
     * @param multipartRequest 请求信息
     * @return 文件信息
     */
    Map<String, Object> uploadFileLocal(MultipartRequest multipartRequest, int businessType);

    /**
     * 上传文件
     *
     * @param multipartRequest 请求信息
     * @return 文件信息
     */
    List<Map<String, Object>> batchUploadFileLocal(MultipartRequest multipartRequest, int businessType);

    /**
     * 上传文件
     *
     * @param multipartRequest 请求信息
     * @return 文件信息
     */
    Map<String, Object> uploadFileChimi(MultipartRequest multipartRequest);

    /**
     * 批量修改文件状态
     *
     * @param businessId 业务id
     */
    void batchInvalidFile(String businessId);

    /**
     * 移动文件
     *
     * @param fileId         文件id
     * @param targetHost     目标服务器
     * @param targetFilePath 目标地址
     */
    void moveFile(String fileId, int targetHost, String targetFilePath);

    /**
     * 同步spo文件信息
     *
     * @return 同步spo文件数量
     */
    int syncSpoFile();

    /**
     * 上传本地文件到spo
     */
    void uploadLocalFileToSpo();

    /**
     * 清理文件
     */
    void cleanFiles();

    /**
     * 重试上传文件
     *
     * @param id 文件id
     */
    void reUploadFile(String id);

    /**
     * 推送文件到质量三色服务器
     *
     * @param id id
     */
    void uploadFileThree(String id);
}
